package persistencia.HSQL;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;

import modelo.Departamento;
import modelo.Hamburgueseria;
import modelo.Lugar;
import modelo.Mercado;
import modelo.Universidad;
import persistencia.DAOS.LugarDAO;
import utils.Constantes;

public class HSQLLugarDAO implements LugarDAO {
	private static Connection connection;
	
	public static void conectar(){
		connection = null;
		try {
			Class.forName("org.hsqldb.jdbcDriver");
			connection = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/", "sa", ""); 	
		}
		
		catch (Exception e) {
			e.printStackTrace();
			System.exit(1);
		}
	}
	
	public static void desconectar(){
		try {
			connection.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}
	
	public HashMap<Integer, Lugar> cargarLugares() {
		HashMap<Integer, Lugar> lugaresAux = new HashMap<Integer, Lugar>();
		conectar();	
		
		try {
			Statement stm = connection.createStatement();
			ResultSet rs = stm.executeQuery("SELECT idLugar, nombre, distancia FROM Lugar");
			
			while(rs.next()){
				Integer id = rs.getInt("idLugar");
				String nombreLugar = rs.getString("nombre");
				Integer distancia = rs.getInt("distancia");
				
				switch(id){
					case Constantes.INDICE_BANCO	:
					case Constantes.INDICE_FABRICA	:
					case Constantes.INDICE_OFIEMPL	:
					case Constantes.INDICE_OFIRENT	:
						lugaresAux.put(id, new Lugar(id, nombreLugar, distancia));
					break;
						
					case Constantes.INDICE_DEPTO	:
					case Constantes.INDICE_COUNTRY	:
						lugaresAux.put(id, new Departamento(id, nombreLugar, distancia));
					break;
					
					case Constantes.INDICE_EMPENIO	:
					case Constantes.INDICE_DESCUEN	:
					case Constantes.INDICE_MERCBLA	:
					case Constantes.INDICE_ROPA	:
					case Constantes.INDICE_ELECTRO	:
						lugaresAux.put(id, new Mercado(id, nombreLugar, distancia));
					break;
					
					case Constantes.INDICE_UNIVERS	:
						lugaresAux.put(id, new Universidad(id, nombreLugar, distancia));
					break;
					
					case Constantes.INDICE_HAMBURG	:
						lugaresAux.put(id, new Hamburgueseria(id, nombreLugar, distancia));
					break;
				}
			}
			
			desconectar();
			stm.close();
		}
		
		catch (SQLException e) {
			e.printStackTrace();
		}
		
		return lugaresAux;
	}
}
